#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QVector>
#include <opencv2/opencv.hpp>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void openCamera();
    void closeCamera();
    void openVideo();
    void pauseVideo();
    void captureVideo();
    void updateFrame();

private:
    Ui::MainWindow *ui;
    cv::VideoCapture capture;
    cv::Mat frame;
    QTimer timer;
    bool isPaused = false;
    QString savePath;
    QVector<cv::Mat> gestureTemplates; // 存储手势模板

    void loadGestureTemplates(); // 加载手势模板
    cv::Mat extractSkin(const cv::Mat& input); // 提取皮肤颜色
    std::vector<double> calculateFourierDescriptor(const std::vector<cv::Point>& contour); // 计算傅里叶描述子
    double matchFourierDescriptors(const std::vector<double>& desc1, const std::vector<double>& desc2); // 匹配傅里叶描述子
    std::vector<cv::Point> detectFingers(const std::vector<cv::Point>& contour); // 检测手指
};

#endif // MAINWINDOW_H
